package com.example.myxm.activity;

import android.os.Bundle;
import android.view.LayoutInflater;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.viewbinding.ViewBinding;

import java.util.function.Function;

/**
 * BaseActivity 使用无参构造 + 抽象方法 getViewBinding(inflater) 来完成 ViewBinding 的绑定。
 *
 * 子类只需重写 getViewBinding(inflater)，返回对应的 Binding 即可。
 */
public abstract class BaseActivity<VB extends ViewBinding> extends AppCompatActivity {
    private VB mBinding;

    /**
     * 必须保留一个无参构造器，保证系统可以通过反射创建 Activity 实例。
     */
    public BaseActivity() {
        super();
    }

    /**
     * 子类覆盖此方法，返回对应 Activity 的 ViewBinding。
     *
     * 例如：
     *  @Override
     *  protected ActivityInComeDetailBinding getViewBinding(@NonNull LayoutInflater inflater) {
     *      return ActivityInComeDetailBinding.inflate(inflater);
     *  }
     *
     * @param inflater Activity.getLayoutInflater()
     * @return 对应的 VB（ViewBinding）实例
     */
    @NonNull
    protected abstract VB getViewBinding(@NonNull LayoutInflater inflater);

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mBinding = getViewBinding(getLayoutInflater());
        setContentView(mBinding.getRoot());
        initData();
    }

    protected abstract void initData();

    /**
     * 提供给子类调用，获取已经绑定好的 ViewBinding。
     *
     * @return 已经 inflate 完成的 VB 实例
     * @throws IllegalStateException 如果 binding 尚未创建或已被销毁
     */
    @NonNull
    protected VB getBinding() {
        if (mBinding == null) {
            throw new IllegalStateException("ViewBinding instance was destroyed or not yet created.");
        }
        return mBinding;
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 释放对 binding 的引用，防止内存泄漏或在 onDestroy 后误用
        mBinding = null;
    }
}







